try!(add_feature(s, key.as_slice(), &mut deps, &mut used,
&mut visited));
}
+ for dep in s.get_dependencies().iter().filter(|d| d.is_optional()) {
+ try!(add_feature(s, dep.get_name(), &mut deps, &mut used,
+ &mut visited));
+ }
}
ResolveRequired(_, requested_features, _, _) => {
for feat in requested_features.iter() {
+use std::io::File;
+
use support::{project, execs, cargo_dir};
use support::COMPILING;
use support::paths::PathExt;
assert_that(p.cargo_process("build").arg("--features").arg("foo"),
execs().with_status(0));
})
+
+test!(everything_in_the_lockfile {
+ let p = project("foo")
+ .file("Cargo.toml", r#"
+ [project]
+ name = "foo"
+ version = "0.0.1"
+ authors = []
+
+ [features]
+ f1 = ["d1/f1"]
+ f2 = ["d2"]
+
+ [dependencies.d1]
+ path = "d1"
+ [dependencies.d2]
+ path = "d2"
+ optional = true
+ [dependencies.d3]
+ path = "d3"
+ optional = true
+ "#)
+ .file("src/main.rs", "fn main() {}")
+ .file("d1/Cargo.toml", r#"
+ [package]
+ name = "d1"
+ version = "0.0.1"
+ authors = []
+
+ [features]
+ f1 = []
+ "#)
+ .file("d1/src/lib.rs", "")
+ .file("d2/Cargo.toml", r#"
+ [package]
+ name = "d2"
+ version = "0.0.2"
+ authors = []
+ "#)
+ .file("d2/src/lib.rs", "")
+ .file("d3/Cargo.toml", r#"
+ [package]
+ name = "d3"
+ version = "0.0.3"
+ authors = []
+
+ [features]
+ f3 = []
+ "#)
+ .file("d3/src/lib.rs", "");
+
+ assert_that(p.cargo_process("fetch"), execs().with_status(0));
+ let lockfile = p.root().join("Cargo.lock");
+ let lockfile = File::open(&lockfile).read_to_string().unwrap();
+ assert!(lockfile.contains(r#"name = "d1""#), "d1 not found\n{}", lockfile);
+ assert!(lockfile.contains(r#"name = "d2""#), "d2 not found\n{}", lockfile);
+ assert!(lockfile.contains(r#"name = "d3""#), "d3 not found\n{}", lockfile);
+})